import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Demo02 {
    /**
     * foreach()方法
     * stream应用
     * 参考文档：https://blog.csdn.net/xiaopeng8742/article/details/124780451
     * 注意点：stream操作：一个stream只能操作一次，链式编程可以多次操作。
     *
     * @param args
     */
    public static void main(String[] args) {

        ArrayList<String> strings = new ArrayList<>();
        strings.add("1");
        strings.add("2");
        strings.add("3");
        strings.add("3");

        /*遍历集合*/
        /*增强for循环*/
        for (String string : strings) {
            System.out.println(string);
        }
        //使用foreach遍历，搭配lambda
        strings.forEach(s -> System.out.println(s));
        /*使用stream foreach*/
        strings.stream().forEach(s -> System.out.println(s));

        //stream常用方式
        /*获取stream*/
        System.out.println("获取stream");
        /*stream.of()将数据转换为stream*/
        Stream<String> stringStream = Stream.of("1", "2", "3");
        /*数组转换stream*/
        int[] ints = {1, 2, 3};
        IntStream stream = Arrays.stream(ints);
        /*集合转化为stream*/
        Stream<String> stream1 = strings.stream();

        System.out.println("stream filter()");
        /*stream filter过滤*/
        //stream1.filter(s -> s.equals("1")).forEach(s -> System.out.println(s));

        System.out.println("stream sorted");
        /*stream排序*/
        /*会报错，上面已经对stream进行了操作，同一个stream只能操作一次，可以使用链式编程方式规避该问题*/
        //stream1.sorted().forEach(s -> System.out.println(s));
        /*自定义比较规则*/
        /*stream1.sorted(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        }).forEach(s -> System.out.println(s));*/

        System.out.println("stream limit()");
        /*limit 截断，截取到第N位*/
        //stream1.limit(1).forEach(System.out::println);

        System.out.println("stream skip()");
        /*skip 跳过，跳过N位,limit skip 互斥*/
        //stream1.skip(1).forEach(System.out::println);

        System.out.println("stream distinct()");
        /*distinct 去重*/
        stream1.distinct().forEach(System.out::println);

        System.out.println("stream map()");
        /*map 映射 就是将一个对象转换成另一个对象，把老对象映射到新对象上*/
        stream1.distinct().map(s -> s.toLowerCase()).collect(Collectors.toList());
    }
}
